import java.net.Socket;
import java.io.*;

public class Obslugaklienta  extends Thread{
	private Socket socket ;
	Message m ;
	int port ;
	private Obslugapliku plik ;
	private ObjectInputStream inStream; 
	private ObjectOutputStream outStream; 
	private Serwer serwer ;
	public Obslugaklienta(Socket s,Serwer p,int pr) throws IOException {
		socket = s ;
		serwer = p ;
		plik = p.getPlik() ;
		port = pr ;
	}
	
	public Message getMessage() {
		try {
			inStream = new ObjectInputStream(socket.getInputStream()); 
		} catch(Exception e) { System.out.println(e.getMessage()); }
		Message m = null ;
		
		try {
			m = (Message) inStream.readObject();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return m;
	}
	
	public void sendMessage(Message m) { //wysylanie z serializacja 		
		try {
			outStream = new ObjectOutputStream(socket.getOutputStream()); 
		} catch(Exception e) { System.out.println(e.getMessage()); }
		
			System.out.println("Sending message to " + socket.getPort());
			try {
				outStream.writeObject(m);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}
	
	public void run() {
		System.out.println("przetwarzam wiadomosc od klienta");		
		Message m = getMessage();
		
		if(m.getType() == 1)//get
		{
			try {
				Message odpowiedz = new Message() ;
				odpowiedz.setType(1) ;
				odpowiedz.setCommand(new String(plik.czytajLinie(Integer.toString(m.getKey())))) ;
				sendMessage(odpowiedz) ;
			
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		else if(m.getType() == 2)//insert
		{
			try {
				plik.piszLinie(Integer.toString(m.getKey()),m.getCommand()) ;
				Message m2 = new Message() ;
				m2.setType(5) ;//dodano plik
				m2.setKey(m.getKey()) ;
				m2.setObciazenie(plik.obciazenieSerwera()) ;
				m2.setCommand(plik.dajSumeKontrolna(Integer.toString(m.getKey()))) ;
				m2.setSender(port) ;
				serwer.sendMessageToLB(m2) ;
			} catch (IOException e) { 
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		
		else if(m.getType() == 3)//UPDATE
		{
			try {
				plik.piszLinie(Integer.toString(m.getKey()),m.getCommand()) ;
				Message m2 = new Message() ;
				m2.setType(6) ;//zmodyfikowano plik
				m2.setKey(m.getKey()) ;
				m2.setObciazenie(plik.obciazenieSerwera()) ;
				m2.setCommand(plik.dajSumeKontrolna(Integer.toString(m.getKey()))) ;
				m2.setSender(port) ;
				serwer.sendMessageToLB(m2) ;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		else if(m.getType() == 4)//delete
		{
			try {
				plik.usunPlik(Integer.toString(m.getKey())) ;
				Message m2 = new Message() ;
				m2.setType(7) ;//usunieto plik
				m2.setKey(m.getKey()) ;
				m2.setObciazenie(plik.obciazenieSerwera()) ;
				m2.setSender(port) ;
				serwer.sendMessageToLB(m2) ;
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		}
	
	}
	